package com.yao.provider.service;

import domain.User;
import org.apache.dubbo.config.annotation.Method;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
import service.UserService;

/**
 * 使用dubbo的service注解暴露服务接口
 *
 * @author yao
 */
@Service(version = "1.0" // 提供者版本。使用版本控制的目的是为了升级，将原有老版本替换掉，将来不再提供老版本的服务，所以不同版本间不能出现相互调用。
        , group = "A"  // 提供者分组。是针对相同接口，给出了多种实现类。这些不同实现并没有谁替换掉谁的意思，是针对不同需求，或针对不同功能模块所给出的不同实现。这些实现所提供的服务是并存的，所以它们间可以出现相互调用关系。
        , protocol = {"dubboProtocol", "rmiProtocol"}// 提供者协议，默认是dubbo。可供选择的协议有dubbo、rmi、hession、http、webService、thrift、memcached、redis、rest。同一个提供者可以提供多种协议的实现
        /*, executes = 10 // Maximum concurrent executes for the service, default value is 0 - no limits
        , actives = 5 // Maximum active requests allowed
        , connections = 3 // 限制长连接个数 Maximum connections service provider can accept, default value is 0 - connection is shared
        , delay = 500 // 延迟暴露。正数：单位为毫秒，表示在提供者对象创建完毕后的指定时间后再发布服务 0：默认值，表示当前提供者创建完毕后马上向注册中心暴露服务。 -1：表示在 Spring 容器初始化完毕后再向注册中心暴露服务
        , methods = {@Method(name = "sayHello"
                            , timeout = 2000
                            , async = true // 开启异步调用
                    )}*/
)
@Component
public class UserServiceA1Impl implements UserService {

    @Override
    public String sayHello(User user) {
        return "hello" + user.getName() + ",from version:1,group:A,provider:2";
    }
}
